/***********************************************************************************
 * 文件名： adc_kb_config.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		ADC键盘组件配置文件
 * 修改记录：
 * 	2024/01/10: 初版。 刘言。 
***********************************************************************************/
/*
VCC    
 |  —— 按钮0 ——|—— AIN
电阻           |
 |  —— 按钮1 ——|
电阻           |
......        
 |  —— 按钮n ——|
电阻          1M下拉电阻
 |             |
GND           GND
*/
#ifndef _ADC_KB_CONFIG_H_
#define _ADC_KB_CONFIG_H_


#include "board.h"

// 定义表示启用转换键值，启用后需要提供一个返回 key_value_t 的转换函数。【未实现】
// 不定义时，键值是按照ADC值由高到低排序的编号。
// #define _KEYBOARD_CONVERT_KEY_VALUE

// 定义表示启用多个按钮按下识别【未实现】
// #define _KEYBOARD_USE_MULTI_PRESS

// 运行模式设置
// 0 - 主动间隔一段时间获取最新AD值
// 1 - 通过 KeyBoard_EvNewAdv 来通知本组件更新了AD值，建议2次调用间隔10ms~30ms。
#define _KEYBOARD_RUN_MODE      0
#if (_KEYBOARD_RUN_MODE == 1)
    // 0: 同步事件通知，将在 KeyBoard_EvNewAdv 中调用事件回调函数，需要注意 KeyBoard_EvNewAdv 在中断中执行时的时间。
    // 1: 异步事件通知，KeyBoard_EvNewAdv 仅改变变量值，将在稍后(<10ms)在主线程中进行事件通知，可能会漏掉按键松手事件，需要自己判断是否换了一个按键按下。
    #define _KEYBOARD_ASYNC_NOTIFY      1
#endif

// 几个按钮
#define _KEYBOARD_NUM           6

#define _KEYBOARD_KEY0_V_H      660
#define _KEYBOARD_KEY0_V_L      571

#define _KEYBOARD_KEY1_V_H      570
#define _KEYBOARD_KEY1_V_L      481

#define _KEYBOARD_KEY2_V_H      480
#define _KEYBOARD_KEY2_V_L      381

#define _KEYBOARD_KEY3_V_H      380
#define _KEYBOARD_KEY3_V_L      281

#define _KEYBOARD_KEY4_V_H      280
#define _KEYBOARD_KEY4_V_L      191

#define _KEYBOARD_KEY5_V_H      190
#define _KEYBOARD_KEY5_V_L      100

// 消抖模式
// 0 - 不消抖。
// 1 - 标记法。做好标记下次扫描再次读取。
// 2 - 延时法。直接延时一段时间再次读取。【未实现】
#define _KEYBOARD_FILTER_MODE   1

#if (_KEYBOARD_RUN_MODE == 0)
// 扫描间隔，单位ms。实际是调用 _Keyboard_GetValue 的间隔。
#define _KEYBOARD_SCAN_INTERVAL     20
#endif

// 需要实现的API

#if (_KEYBOARD_RUN_MODE == 0)
// 获取ADC值。
// u16 _Keyboard_GetValue();
#define _Keyboard_GetValue()          Board_GetKbValue()
#endif

#endif
